package org.dei.perla.sys.device.channel.concrete.serial;

import java.util.ArrayList;

import org.dei.perla.sys.configuration.ConfigurationParameter;

/**
 * Questa classe contiene i parametri di configurazione per un SerialChannel
 * Il SerialChannel usa il package javax.comm.* per instaurare la connessione 
 * seriale.
 * Riferirsi alla documentazione di javax.comm.SerialPort e javax.comm.CommPortIdentifier
 * per maggiori dettagli sui valori assumibili dai vari parametri.
 */
public class SerialChannelConfiguration {

	/**
	 * Costanti di configurazione del parser dell'XML di configurazione
	 */
	private final static String PARAM_PORT_NAME 	= "serial-port-name";
	private final static String PARAM_BAUD_RATE 	= "serial-baud-rate";
	private final static String PARAM_DATA_BITS 	= "serial-data-bits";
	private final static String PARAM_STOP_BITS 	= "serial-stop-bits";
	private final static String PARAM_PARITY 		= "serial-parity";
	private final static String PARAM_TIMEOUT 		= "serial-timeout";
	
	/**
	 * Nome porta seriale da aprire
	 */
	private String pPortName;
	
	/**
	 * Baud rate
	 */
	private int pBaudRate;
	
	/**
	 * Numero bit dati
	 */
	private int pDataBits;
	
	/**
	 * Numero bit di stop
	 */
	private int pStopBits;
	
	/**
	 * Tipo di parità
	 */
	private int pParity;
	
	/**
	 * Timeout massimo per l'apertura della porta seriale (ms)
	 */
	private int pTimeout;

	/**
	 * Inizializza la configurazione di un SerialChannel
	 * @param parParams Parametri di configurazione
	 */
	public SerialChannelConfiguration(ArrayList<ConfigurationParameter> parParams) {
		
		// Leggi i parametri di configurazione
		for (int i = 0; i < parParams.size(); i++) {
			
			ConfigurationParameter tCurrParam = parParams.get(i);
			
			if ( tCurrParam.getName().equalsIgnoreCase(SerialChannelConfiguration.PARAM_BAUD_RATE)) {
				this.pBaudRate = new Integer(tCurrParam.getValue()).intValue();
			} else if ( tCurrParam.getName().equalsIgnoreCase(SerialChannelConfiguration.PARAM_DATA_BITS)) {
				this.pDataBits = new Integer(tCurrParam.getValue()).intValue();
			} else if ( tCurrParam.getName().equalsIgnoreCase(SerialChannelConfiguration.PARAM_STOP_BITS)) {
				this.pStopBits = new Integer(tCurrParam.getValue()).intValue();
			} else if ( tCurrParam.getName().equalsIgnoreCase(SerialChannelConfiguration.PARAM_TIMEOUT)) {
				this.pTimeout = new Integer(tCurrParam.getValue()).intValue();
			} else if ( tCurrParam.getName().equalsIgnoreCase(SerialChannelConfiguration.PARAM_PARITY)) {
				this.pParity = new Integer(tCurrParam.getValue()).intValue();
			} else if ( tCurrParam.getName().equalsIgnoreCase(SerialChannelConfiguration.PARAM_PORT_NAME)) {
				this.pPortName = tCurrParam.getValue();
			} 
		
		}

	}
	
	/**
	 * Inizializza la configurazione di un SerialChannel
	 * @param paramSocketType
	 * @param paramBindIp 
	 * @param paramBindPort 
	 */
	public SerialChannelConfiguration(String parPortName, int parBaudRate, int parDataBits, int parStopBits, int parParity, int parTimeout) {
		super();
		pPortName = parPortName;
		pBaudRate = parBaudRate;
		pDataBits = parDataBits;
		pStopBits = parStopBits;
		pParity = parParity;
		pTimeout = parTimeout;
	}

	/**
	 * Restituisce il baud rate
	 * @return
	 */
	public int getBaudRate() {
		return pBaudRate;
	}

	/**
	 * Restituisce il numero di bit di dati
	 * @return
	 */
	public int getDataBits() {
		return pDataBits;
	}

	/**
	 * Restituisce il tipo di parità
	 * @return
	 */
	public int getParity() {
		return pParity;
	}

	/**
	 * Restituisce il nome della porta seriale utilizzata
	 * @return
	 */
	public String getPortName() {
		return pPortName;
	}
	
	/**
	 * Restituisce il numero di bit di stop
	 * @return
	 */
	public int getStopBits() {
		return pStopBits;
	}

	/**
	 * Restituisce il timeout di apertura della porta seriale (in millisecondi)
	 * @return
	 */
	public int getTimeout() {
		return pTimeout;
	}
	
	
	
	
	
}	
